//装饰器的执行顺序
//总结执行顺序：【实例属性、方法、属性访问器定义在前面先执行】【静态属性、方法定义在前面先执行】【类的装饰器】
function Echo(val: any) {
    return function (target: object, key?: string, descriptor?: any) {
      console.log(val, target, key, descriptor);
    };
  
    // 装饰器逻辑
  }
  
  @Echo("类的装饰3")
  @Echo("类的装饰2")
  @Echo("类的装饰1")
  class MyClass {
    constructor(@Echo("构造函数参数装饰") string: any) {}
  
  
  
    @Echo("静态属性装饰")
    static type='XXX'
  
    @Echo("静态方法装饰")
    static getType(){
      return this.type
    }
    @Echo("实例原型方法装饰")
    handler(@Echo("实例原型方法参数装饰") val: any) {}
  
  
    @Echo("111实例属性装饰")
    name111!:string
  }
  const myclass = new MyClass("ee");
  console.log(1000, myclass);
  //洋葱模型：一个函数，对原来的内容不停的包裹
  //装饰器一般会搭配反射来使用
  //元数据：用来描述数据的（备注、批注），存起来，后续通过批注再来处理进行操作，对数据的操作
  
  export {};
  